# 导入序列化的模块
from rest_framework import serializers
# 导入Models类
from studentweb.models import Student
# 引入正则表达式
import re


class StudentSerializers(serializers.ModelSerializer):
    # 序列化或者反序列化的时候，需要写一些字段的要求
    name = serializers.CharField(help_text="请输入姓名", max_length=5, min_length=2)
    gender =  serializers.CharField(max_length=1, min_length=1)
    mobile = serializers.CharField(max_length=11, min_length=11)


    class Meta:
        model = Student
        fields = "__all__"


    # === 自定义约束 ===
    def validate_gender(self, gender):
        """判断性别是否男或者女"""
        if gender not in ['男', '女']:
            raise serializers.ValidationError("性别只能填写男或者女！")
        return gender

    # 回调函数的命名必须要是：validate_字段名
    def validate_mobile(self, mobile):

        # 1. 校验手机号码是否符合规范
        if not re.match(r'^1[3456789]\d{9}$', mobile):
            raise serializers.ValidationError("手机号码不符合规范！")

        # 2. 校验号码已存在
        is_exists = Student.objects.filter(mobile=mobile).exists()
        if is_exists:
            raise serializers.ValidationError("手机号码已存在！")

        # 返回返回当前符合要求的手机号码
        return mobile


    """
    def validate(self, attrs):
        # --- 校验完所有字段，自动执行的函数！ 作用：校验的工作需要涉及到多个字段 
        password = attrs['password']   # attrs.get('password')也可以
        re_password  = attrs['re_password']
        # 判断是否一样 
        if password != re_password:
            raise serializers.ValidationError("两次密码不一致！")
        
        return attrs
    """




